package top.kaoshanji.p2ch17a;

import top.kaoshanji.y1constant.FileConstant;

import java.io.IOException;
import java.nio.file.*;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 代码清单-p2ch17a-538页a：监听Path
 * author kaoshanji
 * ^_^
 * create time 2025/3/11 16:36
 */
public class PathWatcher {

    // 监听的目录
    // 在此目录下放入一些 txt 文本文件，也放入一些其他类型的文件
    static Path test = Paths.get(FileConstant.LOCAL_ROOT_PATH.concat("p2ch17a538页a"));

    public static void main(String[] args) throws Exception {

        WatchService watchService = FileSystems.getDefault().newWatchService();
        test.register(watchService, StandardWatchEventKinds.ENTRY_DELETE); // 在该目录上注册感兴趣的事件：删除

        // 定时方法 让 删除文件的事件 发生了
        Executors.newSingleThreadScheduledExecutor().schedule(PathWatcher::delTxtFiles, 250, TimeUnit.MILLISECONDS);

        // 主线程等待 删除事件 发生
        WatchKey key = watchService.take();
        for (WatchEvent event: key.pollEvents()) {
            System.out.println("evt.context(): " + event.context() + "\nevt.count(): " + event.count() + "\nevt.kind(): " + event.kind());
        }

    }

    // 删除指定目录下以 txt 结尾的文件
    static void delTxtFiles() {

        try {
            Files.walk(test)
                    .filter(f -> f.toString().endsWith(".txt")) // 需要显式的调用 toString()，否者 endsWith() 会比较整个 Path 对象
                    .forEach(f -> {
                        try {
                            System.out.println("删除文件： " + f);
                            Files.delete(f);
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    });

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }


}
